package engine;

import domain.Award;
import domain.Expression;
import engine.impl.YiXiu;

import java.util.ArrayList;
import java.util.List;

public class RuleEngine {
    //实现规则池
    private static final List<IRule> RULES = new ArrayList<>();

    static {
        RULES.add(new YiXiu());
    }
    /**
     * 判断中将结果的过程
     * @param ex 条件，骰子点数的个数情况
     * @return 结果
     */
    public Award process(Expression ex){
        //多态，RULES=new 规则
        //rule接收的为规则池中满足条件的规则对象，其他不满足条件的规则被过滤掉
        IRule rule = RULES.stream().filter(s->s.evaluate(ex))//调用规则类里面的比较方法，判断中将结果
                .findFirst()//返回满足的第一个条件,如果为空则执行orElse
                .orElse(null);//如果都不满足规则池的条件，返回null

        if (rule == null){
            return new Award("未中奖","");
        }

        //调用满足规则对象的结果方法并返回
        return rule.getAward();
    }
}
